/*
 * Esta clase es la que controla y contiene los paneles, siendo capaz de saber a cada panel lo que enviarle y como crearlos
 * para ser capaz de devolver el que sea necesario en cada momento.
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.ieslaferreria.creditsintesis.logicgame;

import edu.ieslaferreria.creditsintesis.builders.ControlImplementorInteraction;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelColaboracion;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelColaboracion2;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelCompetition;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelCompetition2;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelExigencia;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelExigencia2;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelGame;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelInicio;

import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelIntercanvi;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelMenuWaiting;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelRequeriment;
import edu.ieslaferreria.creditsintesis.builders.Swing.JpanelOferiment;
import edu.ieslaferreria.creditsintesis.builders.Swing.JpanelOferiment2;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelHuida;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelHuidaRes;
import edu.ieslaferreria.creditsintesis.builders.Swing.JPanelWaiting;
import edu.ieslaferreria.creditsintesis.rmi.Client;
import edu.ieslaferreria.creditsintesis.rmi.Pont;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


/**
 * documentar Carlos
 * @author cARLOS gARCIA
 *
 
//	B	-Acceptació Rebuig-Req. Ofer. Exig. Fugida Interc. Comp.  Col.	Pacte
//  A
//Requeriment (RQ)      X	X
//Oferiment   (O) 	X	X         X
//Exigència  (E)			    	  X	       X     X      X     X
//Fugida   (F)
//Intercanvi  (I)	X	X   X     X
//Competició  (CM)			  X	  X            X     X
//Col•laboració  (CL)	X	X   X	  X					  X
//Pacte  (P)	        X	X   X	  X				    X

 */
public class MeetingSituationLogic extends ControlImplementorInteraction{
  
    public static int A_REQUERIMENT = 0;
    private  static String A_R = "REQUERIMENT";
    public static int A_OFERIMENT = 1;
    private static String A_O = "OFERIMENT";
    public static int A_EXIGENCIA = 2;
    private static String A_E = "EXIGENCIA";
    public static int A_FUGIDA = 3;
    private static String A_f = "FUGIDA";
    public static int A_INTERCANVI = 4;
    private static String A_I ="INTERCANVI";
    public static int A_COMPETICIO = 5;
    private static String A_CM ="COMPETICIO";
    public static int A_COLABORACIO = 6;
    private static String A_CL ="COLABORACIO";
    public static int A_OFERIMENTRES = 7;
    public static int A_EXIGENCIARES = 8;
    public static int A_FUGIDARES = 9;
    public static int A_INTERCANVIRES = 10;
    public static int A_COMPETICIORES = 11;
    public static int A_COLABORACIORES = 12;
    public static int A_PACTE = 13;
    private static String A_P = "PACTE";
    public static int A_PANELINICI = 14;
    private static String A_INICI = "Panel de Inici";
    public static int A_PANELWAIT = 15;
    private static String A_W = "Panel de joc";
 public static int A_PANELMENUWAIT = 16;
    private static String A_MW = "Panel de espera altre player";




    private static String N = " ";
    private static String A_ACE = "ACEPTAR";
    private static String A_REB = "REBUTJAR";
    private static String A_SENTENCE_REQ = "Vols Ferme algun REQUERIMENT??";
    private static String A_SENTENCE_OF ="Acceptaries un OFERIMENT??";
    private static String A_SENTENCE_EX ="Espero que aceptis aquesta EXIGENCIA!";
    private static String A_SENTENCE_F =" "/*fugida*/;
    private static String A_SENTENCE_IN ="INTERCANVIem Objectes???";
    private static String A_SENTENCE_COM ="Et bé De gust una COMPETICIO?";
    private static String A_SENTENCE_COL ="Fem un pacte de COLABORACIO?";
    private static String A_SENTENCE_PA ="Fem un PACTE que duri en el Temps??";

    private  JPanelHuidaRes jPSca2;
    private JPanelHuida jPSca;
    private JPanelRequeriment jPReq;
    private JpanelOferiment jPOf;
    private JpanelOferiment2 jPOfRes;
    private JPanelExigencia jPEx;
    private JPanelExigencia2 jPExRes;
    private JPanelIntercanvi jPIn;
    private JPanelCompetition jPCom;
    private JPanelCompetition2 jPComRes;
    private JPanelColaboracion jPCol;
    private JPanelColaboracion2 jPColRes;
    private JPanelWaiting jPWait;
    private  JPanelMenuWaiting jPMenuWait;
   
    /*No Creo una maquina de estados por ahora, solo este vector para recoger las opciones
     correctas en cada caso(la fila de cada accion elegida)*/
     public ArrayList<ArrayList<String>> AccionsPosibles;
     public ArrayList<ArrayList<String>> SentencesActions;
     private ArrayList<JPanelGame> panels;
    private JPanelInicio jPInici;
    private int currentPanelId=-1;
    private Client client;
 public final static String  OPCIO_BASICA = "Seleccio";



    public MeetingSituationLogic(int width, int height,Client client){

        super(width, height);
        this.client = client;
        
/*+4 para llegar a las respuestas*/
/*por ahora solo 3 njpaneles van bien...2x competicion y el de inicio*/
        jPReq = new JPanelRequeriment();
        jPOf = new JpanelOferiment();
        jPOfRes = new JpanelOferiment2();
        jPEx = new JPanelExigencia();
        jPExRes = new JPanelExigencia2();
        jPIn = new JPanelIntercanvi();
        jPCom = new JPanelCompetition(client);/*OJO A ESTE NULLLLLLL*//*el get suitable panel obliga a pasarle uno----no problema*/
        jPComRes = new JPanelCompetition2(client);/*OJO este null, los puentes seran pasados cuando toquen*/
        jPCol = new JPanelColaboracion();
        jPColRes = new JPanelColaboracion2();
        jPInici = new JPanelInicio(client);
        jPWait = new JPanelWaiting(client);
        jPMenuWait = new JPanelMenuWaiting(client);
        jPSca = new JPanelHuida(client);
        jPSca2 = new JPanelHuidaRes(client);



        this.panels = new ArrayList();

        this.panels.add(jPReq);
        this.panels.add(jPOf);
        this.panels.add(jPEx);
        this.panels.add(jPSca);
        this.panels.add(jPIn);
        this.panels.add(jPCom);
        this.panels.add(jPCol);
        this.panels.add(jPOfRes);
        this.panels.add(jPExRes);
        this.panels.add(jPSca2);
        this.panels.add(jPIn);
        this.panels.add(jPComRes);
        this.panels.add(jPColRes);
        this.panels.add(jPWait);
         this.panels.add(jPInici);
         this.panels.add(jPWait);
         this.panels.add(jPMenuWait);





ArrayList<String> Ar_Req = new ArrayList();
ArrayList<String> As_Req = new ArrayList();
Ar_Req.add(A_ACE);
Ar_Req.add(A_REB);
As_Req.add(A_SENTENCE_REQ);
As_Req.add(A_SENTENCE_OF);
As_Req.add(A_SENTENCE_EX);
As_Req.add(A_SENTENCE_F);
As_Req.add(A_SENTENCE_IN);
As_Req.add(A_SENTENCE_COM);
As_Req.add(A_SENTENCE_COL);

ArrayList<String> Ar_Of = new ArrayList();
ArrayList<String> As_Of = new ArrayList();
Ar_Of.add(A_R);
Ar_Of.add(A_O);
Ar_Of.add(A_E);
Ar_Of.add(A_f);
Ar_Of.add(A_I);
Ar_Of.add(A_CM);
Ar_Of.add(A_CL);

As_Of.add(A_SENTENCE_REQ);
As_Of.add(A_SENTENCE_OF);
As_Of.add(A_SENTENCE_EX);
As_Of.add(A_SENTENCE_F);
As_Of.add(A_SENTENCE_IN);
As_Of.add(A_SENTENCE_COM);
As_Of.add(A_SENTENCE_COL);

ArrayList<String> Ar_OfRes = new ArrayList();
ArrayList<String> As_OfRes = new ArrayList();
Ar_OfRes.add(" ");
As_OfRes.add(" ");
ArrayList<String> Ar_Ex = new ArrayList();
ArrayList<String> As_Ex = new ArrayList();
Ar_Ex.add(A_O);
Ar_Ex.add(A_CM);
Ar_Ex.add(A_CL);
Ar_Ex.add(A_P);
As_Ex.add(A_SENTENCE_REQ);

ArrayList<String> Ar_ExRes = new ArrayList();
ArrayList<String> As_ExRes= new ArrayList();
Ar_ExRes.add(A_ACE);
Ar_ExRes.add(A_REB);
As_ExRes.add(A_ACE);
As_ExRes.add(A_REB);
As_ExRes.add("Lo aceptaria, pero aceptar para nada es tonteria...");
As_ExRes.add("no veo ningun problema acepto");
As_ExRes.add("no quiero creo que huire");


ArrayList<String> Ar_F = new ArrayList();
ArrayList<String> As_F = new ArrayList();
Ar_F.add(" ");
Ar_F.add(" ");
As_F.add(" ");
As_F.add(" ");

ArrayList<String> Ar_I = new ArrayList();
ArrayList<String> As_I = new ArrayList();
Ar_I.add(A_R);
Ar_I.add(A_O);
Ar_I.add(A_ACE);
Ar_I.add(A_REB);
As_I.add("Llaves");
As_I.add("huir");
As_I.add("objecte 3 de l'altre player1");
As_I.add("objecte 4 de l'altre player1");
As_I.add("objecte 5 de l'altre player1");
As_I.add("objecte 6 de l'altre player1");
As_I.add("objecte 7 de l'altre player1");

ArrayList<String> Ar_Com = new ArrayList();
ArrayList<String> As_Com = new ArrayList();
Ar_Com.add("Objeto del Otro Player"); /*necesitare sus objetos....
                                        si no fuera el prototipo...como lo haria????
                                        PENSARLO.......*/
Ar_Com.add("ect...");
As_Com.add("COCODRILO LOCO");
As_Com.add("PASA LA PELOTA");

ArrayList<String> Ar_ComRes = new ArrayList();
ArrayList<String> As_ComRes = new ArrayList();
Ar_Com.add("Objeto del Otro Player");
ArrayList<String> Ar_Col = new ArrayList();
ArrayList<String> As_Col = new ArrayList();
Ar_Col.add("Colaboracion esporadica");
Ar_Col.add("Pacto");
As_Col.add("COCODRILO LOCO");
As_Col.add("PASA LA PELOTA");




ArrayList<String> Ar_ColRes = new ArrayList();
ArrayList<String> As_ColRes = new ArrayList();
Ar_Col.add(" ");
As_Col.add(" ");



ArrayList<String> Ar_Pa = new ArrayList();
ArrayList<String> As_Pa = new ArrayList();
Ar_Pa.add(A_R);
Ar_Pa.add(A_O);
Ar_Pa.add(A_ACE);
Ar_Pa.add(A_REB);
As_Pa.add(A_REB);


ArrayList<String> Ar_Ini = new ArrayList();
ArrayList<String> As_Ini = new ArrayList();
Ar_Ini.add(A_R);
Ar_Ini.add(A_O);
Ar_Ini.add(A_E);
Ar_Ini.add(A_f);
Ar_Ini.add(A_I);
Ar_Ini.add(A_CM);
Ar_Ini.add(A_CL);
As_Pa.add(A_REB);

this.AccionsPosibles = new ArrayList();
this.SentencesActions = new ArrayList();

this.AccionsPosibles.add(Ar_Req);
this.AccionsPosibles.add(Ar_Of);
this.AccionsPosibles.add(Ar_Ex);
this.AccionsPosibles.add(Ar_F);
this.AccionsPosibles.add(Ar_I);
this.AccionsPosibles.add(Ar_Com);
this.AccionsPosibles.add(Ar_Col);
this.AccionsPosibles.add(Ar_OfRes);
this.AccionsPosibles.add(Ar_ExRes);
this.AccionsPosibles.add(Ar_F);
this.AccionsPosibles.add(Ar_I);
this.AccionsPosibles.add(Ar_ComRes);
this.AccionsPosibles.add(Ar_ColRes);
this.AccionsPosibles.add(Ar_Pa);
this.AccionsPosibles.add(Ar_Ini);
this.AccionsPosibles.add(Ar_Pa);/*wait*/
this.AccionsPosibles.add(Ar_Pa);/*menuwait*/

this.SentencesActions.add(As_Req);
this.SentencesActions.add(As_Of);
this.SentencesActions.add(As_Ex);
this.SentencesActions.add(As_F);
this.SentencesActions.add(As_I);
this.SentencesActions.add(As_Com);
this.SentencesActions.add(As_Col);
this.SentencesActions.add(As_OfRes);
this.SentencesActions.add(As_ExRes);
this.SentencesActions.add(As_F);
this.AccionsPosibles.add(Ar_I);
this.SentencesActions.add(As_ComRes);
this.SentencesActions.add(As_ColRes);
this.SentencesActions.add(As_Pa);
this.SentencesActions.add(As_Ini);
this.SentencesActions.add(As_Pa);/*wait*/
this.SentencesActions.add(As_Pa);/*menuwait*/





//
///*A_R */{  N  ,   N  ,   N  ,   N  ,   N  ,   N   ,  N  ,  N  ,A_ACE,A_REB,},
///*A_O */{  N  ,  A_O ,   N  ,   N  ,   N  ,   N   ,  N  ,  N  ,A_ACE,A_REB,},
///*A_E */{  N  ,   N  ,  A_E ,   N  ,  A_I , A_CM  ,A_CL , A_P ,  N  ,  N  ,},
///*A_F */{  N  ,   N  ,   N  ,   N  ,   N  ,   N   ,  N  ,  N  ,  N  ,  N  ,},
///*A_I */{ A_R ,  A_O ,   N  ,   N  ,   N  ,   N   ,  N  ,  N  ,A_ACE,A_REB,},
///*A_CM*/{  N  ,  A_O ,  A_E ,   N  ,  A_I , A_CM  ,  N  , A_P ,  N  ,  N  ,},
///*A_CL*/{ A_R ,  A_O ,   N  ,   N  ,   N  ,   N   ,A_CL ,  N  ,A_ACE,A_REB,},
///*A_P */{ A_R ,  A_O ,   N  ,   N  ,   N  ,   N   ,  N  ,  N  ,A_ACE,A_REB,},
//    };
    }

//    Retornara les accions posibles a realitzar en forma de llista per poder emplenar els combos
//            del Jpanel

    public HashMap<String,List<String>>  getAccionsPosibles(int accioSeleccionada){
 if(this.SentencesActions.size() > accioSeleccionada){
      HashMap<String,List<String>> res = new HashMap();

        res.put(OPCIO_BASICA,this.AccionsPosibles.get(accioSeleccionada));

        return res;
        }
        return null;
     }
        
    

/*pone el panel de inicio necesario*/
/*falta crear uno que de los paneles como nextPanel */


     public JPanelGame getSuitablePanelIni(int accio, String Options,Pont po){
        int inc = 0 ;
         
        if(currentPanelId>=0){
            this.getPanels().get(currentPanelId).setVisible(false);
        }

        currentPanelId=accio+inc;
        JPanelGame res = this.getPanels().get(currentPanelId);

        res.setPontPanel(po);
        res.setClient(client);


        res.update(this.getAccionsPosibles(accio),this.getExtrasNeeded(accio));


       res.setVisible(true);

         return res;
     }

     public  ArrayList<String>  getExtrasNeeded(int accio){
        if(this.SentencesActions.size() > accio){
         return  this.SentencesActions.get(accio);
        }
        return null;
     }

    /**
     * @return the panels
     */
    public ArrayList<JPanelGame> getPanels() {
        return panels;
    }

    /**
     * @param panels the panels to set
     */
    public void setPanels(ArrayList<JPanelGame> panels) {
        this.panels = panels;
    }

    public int getCurrentPanelId(){
        return currentPanelId;
    }



   

/*
  public JPanelGame getNextSuitablePanel(int panelActual,boolean resp, String Options){
        int inc = 0 ;
          if(resp==true){
         inc = 5;}
        JPanelGame res = this.panels.get(panelActual+inc);



        res.update(this.getAccionsPosibles(panelActual),this.getExtrasNeeded(panelActual, resp),Options);




         return res;
     }
*/



}







